//#include "include.h"
#include "stm32f10x.h"
#ifndef __MODBUY_SLAVE_H
#define __MODBUY_SLAVE_H

#define SADDR485	1
#define SBAUD485	9600

/* 01H 读强制单线圈 */
/* 05H 写强制单线圈 */
#define REG_D01		0x0101
#define REG_D02		0x0102
#define REG_D03		0x0103
#define REG_D04		0x0104
#define REG_DXX 	REG_D04

/* 02H 读取输入状态 */
#define REG_T01		0x0201
#define REG_T02		0x0202
#define REG_T03		0x0203
#define REG_TXX		REG_T03

/* 03H 读保持寄存器 */
/* 06H 写保持寄存器 */
/* 10H 写多个保存寄存器 */
//#define SLAVE_REDLED			0x1001
//#define SLAVE_GREEDLED		0x1002
//#define SLAVE_BLUELED			0x1003

//#define SLAVE_REG_P01		0x0301
//#define SLAVE_REG_P02		0x0302



//寄存器地址列表
enum{
MReg0	,				//	第0位方便对位，不使用		
MReg_STATE ,	//	设备运行状态
Mreg_Key_POWER ,//	开关机按钮状态
Mreg_Hand_STATE ,	 //机械臂开关机操作
Mreg_ROOM_TEMP ,   //环境温度
Mreg_ROOM_HUM	,    //环境湿度
Mreg_LED_PRINT,    //打印仓柜内照明开关
Mreg_LED_LOGO	,    //打印头LOGO灯状态
MReg_LED_R ,       //LOGO灯-R值/预留
MReg_LED_G ,       //LOGO灯-G值/预留
MReg_LED_B ,       //LOGO灯-B值/预留
MReg_LED_MODE ,    //LOGO灯-模式/预留
Mreg_ERR_STATE ,   //错误代码
Mreg_Stop ,        //应急按钮状态
Mreg_Heat ,        //打印头加热温度
Mreg_Print_Temp ,  //打印头当前温度
Mreg_HFan  ,       //打印头喉管风扇
Mreg_PFan  ,       //打印头风扇速度
Mreg_WNFC1 ,       //NFC1卡片数据读写锁
Mreg_Fila1Pass1 ,  //耗材 密码 1
Mreg_Fila1Pass2 ,  //耗材 密码 2
Mreg_Fila1Pass3 ,  //耗材 密码 3
Mreg_Fila1Pass4 ,  //耗材 密码 4
Mreg_Fila1UID1 ,   //耗材-UID 1
Mreg_Fila1UID2 ,   //耗材-UID 2
Mreg_Fila1UID3 ,   //占位，未使用
Mreg_Fila1UID4 ,   //占位，未使用
Mreg_Fila1Data1 ,  //耗材数据 1
Mreg_Fila1Data2 ,  //耗材数据 2
Mreg_Fila1Data3 ,  //耗材数据 3
Mreg_Fila1Data4 ,  //耗材数据 4
Mreg_SetPLedR ,    //打印仓状态灯R值
Mreg_SetPLedG ,    //打印仓状态灯G值
Mreg_SetPLedB ,    //打印仓状态灯B值
Mreg_SetPLedP ,    //打印仓状态灯数量
Mreg_SetPLedM ,    //打印仓状态灯模式
Mreg_SetF1LedR ,   //耗材状态灯R值
Mreg_SetF1LedG ,   //耗材状态灯G值
Mreg_SetF1LedB ,   //耗材状态灯B值
Mreg_SetF1LedP ,   //耗材状态灯数量
Mreg_SetF1LedM ,   //耗材状态灯模式
Mreg_Grating ,     //安全光栅状态
Mreg_RunMinute ,   //连续运行分钟数
Mreg_Fila_TEMP ,   //耗材仓温度
Mreg_Fila_HUM ,    //耗材仓湿度
Mreg_Limit_Fila ,  //耗材在位检测
Mreg_Soft_Value ,  //机器端固件版本
};

///* 04H 读取输入寄存器(模拟信号) */
//#define NFC15693_DATA_1	0x0401	//卡片数据1 
//#define NFC15693_DATA_2	0x0402	
//#define NFC15693_DATA_3	0x0403	
//#define NFC15693_DATA_4	0x0404	
//#define NFC15693_DATA_5	0x0405	
//#define NFC15693_DATA_6	0x0406	
//#define NFC15693_DATA_7	0x0407	
//#define NFC15693_DATA_8	0x0408	


//#define REG_A01		0x0401
//#define REG_AXX		REG_A01


////超高频读写器寄存器地址
//#define RGD_EPC_S		0x8500	//EPC起始位置
//#define RGD_EPC_E		0x850F	//EPC结束位置
//#define RGD_MEM_S		0x0000	//标签内存区域起始位置
//#define RGD_MEM_E		0X7FFF	//标签内存区域结束位置
//#define REG_ADD			0x8000	//设备地址
//#define REG_BUR			0x8001	//波特率
//#define REG_MODE		0x8002	//工作模式
//#define REG_R_PA		0x8120	//读取功率
//#define REG_W_PA		0x8121	//写入功率
//#define REG_RMODE		0x8002	//读取模式，0，默认参数，自动读取EPC。1非自动读卡
//#define REG_MEN_START	0x8003	//读取内存的的其实地址
//#define REG_MEM_NUM		0x8004	//读取内存的数量，字节数量
//#define REG_CLEAR		0x8005	//缓存时间，清除标签的缓存时间，单位
//#define REG_TAG			0x8006	//标签在位 0为没有标签，其他值为对应读到的标签数量


/* RTU 应答代码 */
#define RSP_OK				0		/* 成功 */
#define RSP_NOTCARR			0x0F		/* 成功 */
#define RSP_ERR_CMD			0x01	/* 不支持的功能码 */
#define RSP_ERR_REG_ADDR	0x02	/* 寄存器地址错误 */
#define RSP_ERR_VALUE		0x03	/* 数据值域错误 */
#define RSP_ERR_WRITE		0x04	/* 写入失败 */

#define S_RX_BUF_SIZE		256
#define S_TX_BUF_SIZE		256

//modbus协议控制结构体
typedef struct
{
	uint8_t RxBuf[S_RX_BUF_SIZE];
	uint8_t RxCount;
	uint8_t RxStatus;
	uint8_t RxNewFlag;

	uint8_t RspCode;

	uint8_t TxBuf[S_TX_BUF_SIZE];
	uint8_t TxCount;
	
	
}MODS_T;

typedef struct
{
	/* 03H 06H 读写保持寄存器 */
	uint16_t P01;
	uint16_t P02;

	/* 04H 读取模拟量寄存器 */
	uint16_t A01;

	/* 01H 05H 读写单个强制线圈 */
	uint16_t D01;
	uint16_t D02;
	uint16_t D03;
	uint16_t D04;

}VAR_T;

void MODS_Poll(void);
void MODS_ReciveNew(uint8_t _byte);
//void modbus_TIM3_Init(uint16_t arr,uint16_t psc);
int16_t readMdodbusReg(int16_t reg);
void writeMdodbusReg(uint16_t reg,int16_t value);
extern MODS_T g_tModS;
extern VAR_T g_tVar;
#endif

/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
